const fs = require('fs');
const path = require('path');

const join = path.join;
//获取基于当前路径的目标文件
const resolve = dir => path.join(__dirname, '../', dir);

function getComponentEntry(dirName) {
  //获取目录下所有文件名称
  let files = fs.readdirSync(resolve(dirName));
  const componentEntries = files.reduce((fileObj, item) => {
    //文件路径
    const itemPath = join(dirName, item);
    //在文件夹中
    const isDir = fs.statSync(itemPath).isDirectory();
    const [name, suffix] = item.split('.');
    
    if (isDir) {
      //各组件入口文件
      fileObj[item] = resolve(join(itemPath, 'index.js'));
    }
    else if (suffix === 'js') {
      //主入口文件
      fileObj[name] = resolve(`${itemPath}`);
    }

    return fileObj;
  }, {});

  return componentEntries;
}

module.exports = {
  //输出文件目录
  outputDir: resolve('lib'),
  //打包时候是否输出.map文件 (去除生产环境生产map)
  productionSourceMap: false,
  //webpack配置
  configureWebpack: {
      //入口文件对象， 键值对应多个入口文件
      entry: getComponentEntry('packages'),
      //输出配置
      output: {
          //文件名称
          filename: '[name]/index.js',
          //构建依赖类型
          //libraryTarget: 'commonjs2',
          libraryTarget: 'umd',
          //库中被导出的项，标签引入时直接暴露组件，挂载window
          libraryExport: 'default',
          //引用时的依赖名，用于标签导入
          library: 'yz-ui'
      }
  },
  css: {
      //配置 css source maps
      sourceMap: false,
      //提取css，并指定路径文件名
      extract: {
          filename: '[name]/index.css'
      }
  },
  chainWebpack: config => {
      //删除splitChunks，在打包组件的时候，并不希望抽离每个组件的公共js出来，而是每个独立打包，于是删除这个配置
      config.optimization.delete('splitChunks');
      //无需复制public目录文件到打包目录
      config.plugins.delete('copy');
      //只打包组件，不生成html页面
      config.plugins.delete('html');
      //preload以及prefetch，因为删除了html插件，所以这两个也没用
      config.plugins.delete('preload');
      config.plugins.delete('prefetch');
      //删除热更新hot-module-reload
      config.plugins.delete('hmr');
      //删除自动加上的入口：app
      config.entryPoints.delete('app');
  }
}